/*	
	WeaponFLUXbeam.h
	(c)2004 Palestar, Richard Lyle
*/

#ifndef WEAPON_FLUX_BEAM_H
#define WEAPON_FLUX_BEAM_H

#include "Game/Constants.h"
#include "Game/GadgetBeamWeapon.h"



//----------------------------------------------------------------------------

class WeaponFLUXbeam : public GadgetBeamWeapon
{
public:
	DECLARE_WIDGET_CLASS();

	// NounGadget interface
	Type type() const
	{
		return WEAPON_CLOSE;
	}
	int	maxDamage() const
	{
		return (2800 + (level() * 100))* enhancementModifier( enhancementSystem(), NounEnhancement::MT_DAMAGE );
	}
	int	addValue() const
	{
		return 8000;
	}
	int buildTechnology() const
	{
		return 35;
	}
	int	buildCost() const
	{
		return 90;
	}
	dword buildFlags() const
	{
		return NounPlanet::FLAG_METALS;
	}
	int	buildTime() const
	{
		return 360;
	}
	// GadgetWeapon interface
	int	energyCost() const
	{
		return (1500 + (level() * 100))* enhancementModifier( enhancementSystem(), NounEnhancement::MT_ENERGY );
	}
	int	energyCharge() const
	{
		return (15 + floor (level() * 0.2))* enhancementModifier( enhancementSystem(), NounEnhancement::MT_COOLDOWN );
	}
	int	damage() const
	{
		return (8 + level())* enhancementModifier( enhancementSystem(), NounEnhancement::MT_DAMAGE );
	}
	int	damageRandom() const
	{
		return (2 + floor (level() * 0.28))* enhancementModifier( enhancementSystem(), NounEnhancement::MT_DAMAGE );
	}
	int	damageFalloff() const
	{
		return 9 + level();
	}
	dword damageType() const
	{
		return DAMAGE_ENERGY | DAMAGE_EMP;
	}
	int	duration() const
	{
		return 100 - (level() * 3);
	}
	float length() const
	{
		return (180.0f + (level() * 5.0f))* enhancementModifier( enhancementSystem(), NounEnhancement::MT_RANGE );
	}
	int repairRate() const
	{
		return 2;
	}
};

//----------------------------------------------------------------------------



#endif

//----------------------------------------------------------------------------
// EOF
